package com.nba.servlet;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.nba.service.VideoService;
import com.nba.service.impl.VideoServiceImpl;


@WebServlet("/videoServlet.do")
public class VideoServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		FileItemFactory itemFactory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(itemFactory);
		upload.setHeaderEncoding("UTF-8");
		
		if(upload.isMultipartContent(req)) { //判断 这个表单是不是一个 文件上传表单 （判断表单里有没有 enctype="multipart/form-data"）
			try {
				String videoTheme = null;
				String videoContent = null;
				Date videoTime = null; //用于接收 用户发过来的请求当中 文本参数
				String videoUrl = null;
				int videoId = -1;
				List<FileItem> items = upload.parseRequest(req); // 核心对象把 请求中的 参数(文本、文件) 转换成一个 FileItem集合
				for(FileItem item : items) {//遍历所有 组件
					
					if(item.isFormField()) { //判断取出的组件是否是文本
//						System.out.println(item.getFieldName());//获取组件在表单中name属性的值
//						System.out.println(item.getName());//文本无效
//						System.out.println(item.getContentType());//文本无效
//						System.out.println(item.getString("UTF-8"));//获取组件的值（只用于文本）
						if("videoTheme".equals(item.getFieldName())) {
							videoTheme = item.getString("UTF-8");
						}
						if("videoContent".equals(item.getFieldName())) {
							videoContent = item.getString("UTF-8");
						}
						if("videoTime".equals(item.getFieldName())) {
							SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//							Date date = new Date(item.getString("UTF-8"));
//							System.out.println(date);
//							String str = format.format(date);
							String str = item.getString("UTF-8").replace("T"," ");

							System.out.println(str);
							videoTime = format.parse(str);
							System.out.println(videoTime);
						}
						if("typeId".equals(item.getFieldName())) {
							videoId = Integer.parseInt( item.getString("UTF-8"));
							System.out.println(videoId);
						}
					}else {//不是组件，是一个文件
						
//						System.out.println(item.getName());//获取用户上传文件的 原始文件名字
//						System.out.println(item.getContentType());//获取 用户上传文件的类型 contentType
//						System.out.println(item.getString("UTF-8"));//获取组件的值（只用于文本）
//						System.out.println(item.getSize()) ;获取 上传文件的大小
//						InputStream ins = item.getInputStream();//获取 上传文件读取的输入流，用于读用户上传的文件，手动复制
//						String realPath = req.getServletContext().getRealPath("userImg");// 获取项目路径下 某个文件夹的 真实路径、把文件存在 项目路径下
						//希望 把程序 和 上传的文件分开，把文件 项目路径之外(不放在tomcat里)
//						String realPath = "c://userUpload";
//						File folder = new File(realPath);//图片保存在 服务器的某个真实地址(不放在项目路径下)
//						if(!folder.exists()) {
//							folder.mkdir();
//						}
						// 获取 一个唯一的文件 名字(UUID,时间 戳)+文件的后缀名
						videoUrl = System.currentTimeMillis()+item.getName().substring(item.getName().lastIndexOf("."));
						// 设置 最终复制文件的文件路径
						File desFile = new File(videoUrl);
						/*
						 * 手动复制文件
						 * OutputStream ops = new FileOutputStream(desFile); int a = -1;
						 * while((a=ins.read())!=-1) { ops.write(a); } ops.flush(); ins.close();
						 */
						item.write(desFile);//利用item提供的方法进行复制
						
					}
//					System.out.println(newUrl);
//					
				}
				String virutalPath = "/nba/images/"+videoUrl;
				VideoService videoservice = new VideoServiceImpl();
				videoservice.addVideo(videoTheme, videoContent, virutalPath, videoTime, videoId);
				System.out.println("yes");
				resp.sendRedirect("SearchServlet.do");
//				req.setAttribute("fileName", fileName);
//				req.setAttribute("realName", realname);
//				req.getRequestDispatcher("success.jsp").forward(req, resp);
			} catch (FileUploadException e) {

				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			System.out.println("不是文件上传表单");
		}
		
	}

}
